查看原文
其他

【秘籍总结】玩转Python里的字符串|上篇

xinxin 菜鸟学Python 2020-11-18

这是菜鸟学Python的第108篇原创文章

阅读本文大概需要2分钟



    目前累计已经写了100多篇,写了小白入门篇,爬虫数据库篇,以及数据可视化分析.  洋洋洒洒,越写越多.下一个阶段我准备开始写机器学习,文本分析. 而文本分析里面有一个非常重要技巧就是字符串的处理,今天我就把字符串的技巧先粗略总结一下,算是先热个身吧.



1.字符串里面基本技巧

比如我们有这么一段文本话:

text1='Hi Everyone your work is going to fill a large part of your life. ' \

      'And the only way to be truly satisfied is to do what ' \

      'you believe is great work in United Nations'


1).找最长的单词

最长的单词是satisfied


2).找单词的长度是5或6

我列出了几个方法去分析,普通的推导列表,或者用高阶函数filter,map

>>

['going', 'large', 'life.', 'truly', 'great', 'United']

['going', 'large', 'life.', 'truly', 'great', 'United']

['going', 'large', 'life.', 'truly', 'great', 'United']


3).列出首字母大写的单词

  • 可以直接用字符串里面的内置函数istitle

  • 也可以用强大的正则表达式去过滤


4).使用最频繁的单词

一般对列表里面的元素统计,我喜欢用collections里面的Counter函数,非常方便


2.字符串的分割

字符串的分割,相信很多小伙伴都会想到split函数,确实split非常方便,但是如果碰到复杂的字符串分割,你怎么办:

比如:

my_strings='qwer|tyu;iop|asd,fgh\tjkl\txyz'

这个字符串里面有很多杂七杂八的分割符,如果想用split()一次搞定,比如写成split('|;,\t')这样是不行的,如果我非常想用split有没有什么办法呢


1).霸王硬上弓split

我们无法用split一次搞定,但是我们可以多次迭代用split来分割

  • 首先我们要分割的分割符放在一个列表里面[';','|',',','\t']

  • 接着我们把my_strings这一串乱码迭代分割,用map来分割

  • map分割完毕之后会变成一个列表嵌套列表:

    [['qwer'], ['tyu'], ['iop'], ['asd,fgh\tjkl\txyz']]

    [['qwer'], ['tyu'], ['iop'], ['asd'], ['fgh\tjkl\txyz']]

    [['qwer'], ['tyu'], ['iop'], ['asd'], ['fgh'], ['jkl'], ['xyz']]

    所以我们一定要用一个新的列表把它碾平

>>

['qwer', 'tyu', 'iop', 'asd', 'fgh', 'jkl', 'xyz']



2).永远的正则

文本的处理永远无法绕开正则,当然有同学说sklearn,NLTK确实不假,但是正则绝对是根基和基础(正则我入门篇里写了3篇,需要的童鞋翻一下历史文章)

  • 导入re模块,用re.split()一招搞定

  • 而且如果你的字符串里面有连续分割符比如|||,只能用正则去处理,上面第一种方法搞不定的



3.字符串的拼接

对于字符串的拼接,我们我们最常用的是+,也可以用join,二者好像看起来一样嘛,其实不一样的

比如:names=['Hello',' James',',',' how',' are',' you', '!']


1).用+号拼接

>>

Hello

Hello James

Hello James,

Hello James, how

Hello James, how are

Hello James, how are you

Hello James, how are you!

Hello James, how are you!

我们把每一次的拼接都打印出来,发现其实每一次都分配了一个新的字符串


2).用join函数

print ''.join(names) 

>>

Hello James, how are you!

一次搞定


3).复杂结构的字符混合列表

join函数虽然很好,但是如果list里面的元素种类繁多,怎么办

比如:names2=['Hello',123,'James']

我们可以用一个推到列表或者是高阶map函数把列表里面的元素都str化

或者用第二种方式生成一个生成器迭代一下,开销会小一点.


4)用+和join的区别

主要是开销的问题,如果你的字符串列表很大,很大性能上就会有明显的区别

>>

cost:0.142536878586

cost:0.0240750312805


如果我们有一个一百万的字符串列表,里面有1000000个字符,我们用+和join两种方法去对比,我们用一个装饰器去计算运行时间,发现join的效率比+要高很多很多



欢迎大家关注 菜鸟学Python",更多好玩有趣的Python原创教程,趣味算法,经验技巧,行业动态,尽在菜鸟学Python,一起来学python吧


历史人气文章

菜鸟学Python入门教程大盘点|7个多月的心血总结

同学,学Python真的不能这样学

全网爬取6500多只基金|看看哪家基金最强

用Python破解微软面试题|24点游戏

2道极好的Python算法题|带你透彻理解装饰器的妙用

一道Google的算法题 |Python巧妙破解


 长按二维码,关注【菜鸟学python】




来源 | 菜鸟学Python

作者 | xinxin

本文章为菜鸟学Python独家原创稿件,未经授权不得转载




    您可能也对以下帖子感兴趣

    文章有问题?点此查看未经处理的缓存